/*
 * Copyright (c) 2017,安徽皖通科技股份有限公司 All rights reserved.
 */
package com.wttech.dzzf.process.util;

import java.text.ParseException;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;

/**
 * @date 2017年9月24日
 * @author MaShibo
 */
public interface CertVerificationService {
    
    
    boolean test(String cert);
    
    /**
     * 身份证号验证
     * 
     * @date 2017年9月24日
     * @author MaShibo
     */
    public class IdCardCheck implements CertVerificationService {
        
        
        @Override
        public boolean test(String certNo) {
            if (StringUtils.length(certNo) == 18) {
                String birthday = certNo.substring(6, 14);
                try {
                    DateUtils.parseDate(birthday, new String[] { "yyyyMMdd" });
                } catch (ParseException e) {
                    return false;
                }
                return Pattern.matches(
                        "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9X]$",
                        certNo);
            }
            return false;
        }
    }
    
    /**
     * 军官证验证
     * 
     * @date 2017年9月24日
     * @author MaShibo
     */
    public class OfficerCertCheck implements CertVerificationService {
        
        
        @Override
        public boolean test(String certNo) {
            return StringUtils.length(certNo) == 8;
        }
        
    }
    
    /**
     * 组织机构代码证验证
     * 
     * @date 2017年9月24日
     * @author MaShibo
     */
    public class OrgCertCheck implements CertVerificationService {
        
        
        @Override
        public boolean test(String certNo) {
            return StringUtils.isNotBlank(certNo) && Pattern.matches("^[a-zA-Z\\d]{8}-[a-zA-Z\\d]{1}$", certNo);
        }
        
    }
    
    /**
     * 统一社会信用代码证验证
     * 
     * @date 2017年9月25日
     * @author MaShibo
     */
    public class CreditCodeCheck implements CertVerificationService {
        
        
        @Override
        public boolean test(String cert) {
            return StringUtils.isNotBlank(cert)
                    && Pattern.matches("^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$", cert);
        }
        
    }
    
    /**
     * 出入境证号码验证
     * 
     * @date 2017年9月25日
     * @author MaShibo
     */
    public class ArrivalCardCheck implements CertVerificationService {
        
        
        @Override
        public boolean test(String cert) {
            return false;
        }
        
    }
    
    /**
     * 护照验证
     * 
     * @date 2017年9月25日
     * @author MaShibo
     */
    public class PassPortCheck implements CertVerificationService {
        
        
        @Override
        public boolean test(String cert) {
            return Pattern.matches("^[GPSD]\\d{7,8}$", cert);
        }
        
    }
    
    /**
     * 验证证件类型是否正确
     * 
     * @date 2017年9月24日
     * @author MaShibo
     */
    public class CertifiTypeCheck {
        
        
        public boolean test(Integer certifiType) {
            return certifiType != null && (certifiType == 0 || certifiType == 1 || certifiType == 2 || certifiType == 3
                    || certifiType == 4 || certifiType == 101);
        }
        
    }
    
}
